# -*- coding: UTF-8 -*-
from selenium import webdriver
import time, os
from datetime import datetime
from cityfun import getcity
import random
import cv2
from PIL import ImageFont, ImageDraw, Image
import numpy as np
import glob

moth = datetime.now().strftime("%m")


def cv_imread(filePath):
    cv_img = cv2.imdecode(np.fromfile(filePath, dtype=np.uint8), -1)
    return cv_img

def init_dir():
    if not os.path.isdir('./city'+moth):
        os.mkdir('./city'+moth)
        os.mkdir('./city' + moth + os.sep + 'one')
        os.mkdir('./city' + moth + os.sep + 'newone')
        os.mkdir('./city' + moth + os.sep + 'two')
        os.mkdir('./city' + moth + os.sep + 'three')
        os.mkdir('./city' + moth + os.sep + 'four')
        os.mkdir('./city' + moth + os.sep + 'five')


# 根据城市拼音截图
def screenshot(level,city,cncity):
    driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
    driver.set_window_size(1200, 900)
    driver.get('https://'+city+'.anjuke.com/market/')
    time.sleep(random.randint(5, 15))
    driver.save_screenshot('./city'+moth+os.sep+level+os.sep+cncity+'.png')
    driver.close()
    img = Image.open('./city'+moth+os.sep+level+os.sep+cncity+'.png')
    cropped = img.crop((0, 185, 1171, 520))  # (left, upper, right, lower)
    cropped.save('./city'+moth+os.sep+level+os.sep+cncity+'.png')

# 定义图像拼接函数
def image_compose(level):

    IMAGES_PATH = './city'+moth+os.sep+level+os.sep  # 图片集地址
    IMAGES_FORMAT = ['.jpg', '.JPG', '.png']  # 图片格式
    IMAGE_WIDTH = 1171  # 每张图片的宽度
    IMAGE_HEIGHT = 315  # 每张图片的高度
    IMAGE_ROW = 2  # 图片间隔，也就是合并成一张图后，一共有几行
    IMAGE_COLUMN = 1  # 图片间隔，也就是合并成一张图后，一共有几列
    IMAGE_SAVE_PATH = moth +'_'+level+'_final.png'  # 图片转换后的地址

    # 获取图片集地址下的所有图片名称
    image_names = [name for name in os.listdir(IMAGES_PATH) for item in IMAGES_FORMAT if
                   os.path.splitext(name)[1] == item]

    print(len(image_names))

    # 简单的对于参数的设定和实际图片集的大小进行数量判断
    # if len(image_names) != IMAGE_ROW * IMAGE_COLUMN:
    #     raise ValueError("合成图片的参数和要求的数量不能匹配！")

    IMAGE_ROW = len(image_names)

    to_image = Image.new('RGB', (IMAGE_COLUMN * IMAGE_WIDTH, IMAGE_ROW * IMAGE_HEIGHT))  # 创建一个新图
    # 循环遍历，把每张图片按顺序粘贴到对应位置上
    for y in range(1, IMAGE_ROW + 1):
        for x in range(1, IMAGE_COLUMN + 1):
            from_image = Image.open(IMAGES_PATH + image_names[IMAGE_COLUMN * (y - 1) + x - 1]).resize(
                (IMAGE_WIDTH, IMAGE_HEIGHT), Image.ANTIALIAS)
            to_image.paste(from_image, ((x - 1) * IMAGE_WIDTH, (y - 1) * IMAGE_HEIGHT))
    return to_image.save(IMAGE_SAVE_PATH)  # 保存新图

def createeditor(timestr,city,template):
    citystr = ''
    for c in city.split('、'):
        str = '#'+c+'#'+'、'
        citystr += str
    result = timestr + citystr + template
    return result

# 添加文字
def drawtext(pngpath,cncity,dest):
    bk_img = cv_imread(pngpath)
    # 设置需要显示的字体
    fontpath = "font/simsun.ttc"
    font = ImageFont.truetype(fontpath, 32)
    img_pil = Image.fromarray(bk_img)
    draw = ImageDraw.Draw(img_pil)
    # 绘制文字信息<br># (100,300/350)为字体的位置，(255,255,255)为白色，(0,0,0)为黑色
    draw.text((100, 300), cncity, font=font, fill=(254, 92, 0))
    bk_img = np.array(img_pil)
    # cv2.imshow("add_text", bk_img)
    # cv2.waitKey()
    # cv2.imwrite(dest, bk_img)
    cv2.imencode('.png', bk_img)[1].tofile(dest)

# 图片合成视频
def imagetovideo(imgepath,savepath):
    size = (1171, 335)
    videpath = savepath
    fourcc = cv2.VideoWriter_fourcc(*"mp4v")
    videoWriter = cv2.VideoWriter(videpath, fourcc, 1, size)  # 视频按照图片尺寸合成
    imgpaths = imgepath
    imgs = glob.glob(imgpaths)
    for imgname in imgs:
        if os.path.isfile(imgname):
            for i in range(3):  # 一张图循环7次，fps = 1，一张图停留7s
                frame = cv2.imread(imgname)
                videoWriter.write(frame)
        else:
            print("error")
    videoWriter.release()



if __name__ == '__main__':

    timestr = datetime.now().strftime("%m")

    strone = "北京、上海、广州"
    strnewone = "成都、重庆、杭州、武汉、西安、郑州、青岛、长沙、天津、苏州、南京、东莞、沈阳、合肥、佛山"
    strtwo = "宁波、昆明、福州、无锡、厦门、哈尔滨、长春、南昌、济南、大连、贵阳、温州、石家庄、泉州、南宁、金华、常州、珠海、惠州、嘉兴、南通、中山、保定、兰州、台州、徐州、太原、绍兴、烟台、廊坊"
    strthree = "海口、汕头、潍坊、扬州、洛阳、乌鲁木齐、临沂、唐山、镇江、盐城、湖州、赣州、漳州、揭阳、江门、桂林、邯郸、泰州、济宁、呼和浩特、咸阳、芜湖、三亚、阜阳、淮安、遵义、银川、衡阳、上饶、柳州、淄博、莆田、绵阳、湛江、商丘、宜昌、沧州、连云港、南阳、蚌埠、驻马店、滁州、邢台、潮州、秦皇岛、肇庆、荆州、周口、马鞍山、清远、宿州、威海、九江、新乡、信阳、襄阳、岳阳、安庆、菏泽、宜春、黄冈、泰安、宿迁、株洲、宁德、鞍山、南充、六安、大庆、舟山"
    strfour = "常德、渭南、孝感、丽水、运城、德州、张家口、鄂尔多斯、阳江、泸州、丹东、曲靖、乐山、许昌、湘潭、晋中、安阳、齐齐哈尔、北海、宝鸡、抚州、景德镇、延安、三明、抚顺、亳州、日照、西宁、衢州、拉萨、淮北、焦作、平顶山、滨州、吉安、濮阳、眉山、池州、荆门、铜仁、长治、衡水、铜陵、承德、达州、邵阳、德阳、龙岩、南平、淮南、黄石、营口、东营、吉林、韶关、枣庄、包头、怀化、宣城、临汾、聊城、梅州、盘锦、锦州、榆林、玉林、十堰、汕尾、咸宁、宜宾、永州、益阳、黔南州、黔东南、恩施、红河、大理、大同、鄂州、忻州、吕梁、黄山、开封、郴州、茂名、漯河、葫芦岛、河源、娄底、延边"
    strfive = "汉中、辽阳、四平、内江、六盘水、安顺、新余、牡丹江、晋城、自贡、三门峡、赤峰、本溪、防城港、铁岭、随州、广安、广元、天水、遂宁、萍乡、西双版纳、绥化、鹤壁、湘西、松原、阜新、酒泉、张家界、黔西南、保山、昭通、河池、来宾、玉溪、梧州、鹰潭、钦州、云浮、佳木斯、克拉玛依、呼伦贝尔、贺州、通化、阳泉、朝阳、百色、毕节、贵港、丽江、安康、通辽、德宏、朔州、伊犁、文山、楚雄、嘉峪关、凉山、资阳、锡林郭勒盟、雅安、普洱、崇左、庆阳、巴音郭楞（巴州）、乌兰察布、白山、昌吉、白城、兴安盟、定西、喀什、白银、陇南、巴彦淖尔、巴中、鸡西、乌海、临沧、海东、张掖、商洛、黑河、哈密、吴忠、攀枝花、双鸭山、阿克苏、石嘴山、阿拉善盟、海西、平凉、林芝、固原、武威、儋州、吐鲁番、甘孜、辽源、临夏、铜川、金昌、鹤岗、伊春、中卫、怒江、和田、迪庆、甘南、阿坝、大兴安岭、七台河、山南、日喀则、塔城、博尔塔拉、昌都、阿勒泰、玉树、海南、黄南、果洛、克孜勒苏、阿里、海北、那曲、三沙"


    # 修改的参数
    init_dir()
    root_dir = "city06/four/"
    level = "four"   #与目录名一致
    citystr = strfour   #城市列表名称一致

    # 截图
    # for city in citystr.split('、'):
    #     print(city)
    #     screenshot(level, getcity(city), city)
    #
    # 合图
    # image_compose(level)

    # 生成文案
    # with open('1.txt','w+',encoding='utf-8') as f:
    #     f.write(createeditor('2021年的'+timestr.strip('0')+'月 ',citystr,'你的选择是什么？'))

    # 图片添加文字
    # for file in os.listdir(root_dir):
    #     drawtext(root_dir+file, file.split('.')[0], getcity(root_dir+file.split('.')[0])+'_new.png')

    # 图片转视频
    # imagetovideo("city06\\newone\*_new.png", "newone.mp4")
    imagetovideo("city06\\three\*.png", "three.mp4")